package com.gitee.yongzhuzl.commonutil.util.json;

import com.google.gson.*;

import java.util.ArrayList;
import java.util.List;

/**
 * description: JSON工具类（基于com.google.gson）
 * @author 朱正磊
 * @date 2019-08-05 09:29:18
 */
public class GsonUtil {

    /**
     * description: java对象转json字符串
     * @author 朱正磊
     * @date 2019-08-05 11:11:28
     * @param object 待进行转换的java对象
     * @return 返回java对象进行json序列化之后的字符串
     */
    public static String toString(Object object) {
        GsonBuilder builder = new GsonBuilder();
        Gson gson = builder.create();
        return gson.toJson(object);
    }

    /**
     * description: java对象转json字符串（格式化）
     * @author 朱正磊
     * @date 2019-08-05 11:11:28
     * @param object 待进行转换的java对象
     * @return 返回java对象进行json序列化之后的字符串
     */
    public static String toPrettyString(Object object) {
        GsonBuilder builder = new GsonBuilder();
        builder.setPrettyPrinting();
        Gson gson = builder.create();
        return gson.toJson(object);
    }

    /**
     * description: 把JSON格式的字符串（单个数据）解析为我们需要的java对象
     * @author 朱正磊
     * @date 2019-08-05 14:00:48
     * @param json json格式字符串（单个）
     * @param clazz 类对象
     * @return 返回我们需要的java对象
     * @param <T> 泛型
     */
    public static <T> T toBean(String json, Class<T> clazz) {
        Gson gson = new Gson();
        return gson.fromJson(json, clazz);
    }

    /**
     * description: 把JSON格式的字符串（数组数据）解析为我们需要的java对象集合
     * @author 朱正磊
     * @date 2019-08-05 14:24:54
     * @param json json格式字符串（数组）
     * @param clazz 类对象
     * @return 返回我们需要的java对象集合
     * @param <T> 泛型
     */
    public static <T> List<T> toList(String json, Class<T> clazz) {
        List<T> list = new ArrayList<>();
        Gson gson = new Gson();
        JsonArray array = JsonParser.parseString(json).getAsJsonArray();
        for (JsonElement element : array) {
            list.add(gson.fromJson(element, clazz));
        }
        return list;
    }

}
